﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using Proyecto7CAD.Properties;
using Proyecto7CAD.BDProyecto7DataSetTableAdapters;
using System.Data;

namespace Proyecto7CAD
{
    public class MapaCAD
    {
        //Insercion de un mapa en la base de datos
        public void insertarMapa(string nombre, string imagen, string descripcion)
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                MapaTableAdapter da = new MapaTableAdapter();
                da.Insert(nombre, imagen, descripcion);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conex.Close();
            }

        }

        //Inserta una localizacion en MapaLocalizacion
        public void insertarLocalizacionMapa(int idMapa, int idLocalizacion, int coorX, int coorY)
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter("select * from MapaLocalizacion", conex);

                da.Fill(bdvirtual, "MapaLocalizacion");

                DataTable tabla = bdvirtual.Tables["MapaLocalizacion"];

                DataRow nuevafila = tabla.NewRow();

                nuevafila[0] = idMapa;
                nuevafila[1] = idLocalizacion;
                nuevafila[2] = coorX;
                nuevafila[3] = coorY;

                tabla.Rows.Add(nuevafila);

                SqlCommandBuilder cbuilder = new SqlCommandBuilder(da);
                da.Update(bdvirtual, "MapaLocalizacion");
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conex.Close();
            }
        }

        //Obtiene el ID del ultimo mapa insertaro
        public int obtenerUltimoIDMapa()
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtualIndice = new DataSet();
                SqlDataAdapter daindicelocalizacion = new SqlDataAdapter("select * from Mapa order by idMapa desc", conex);

                daindicelocalizacion.Fill(bdvirtualIndice, "mapa");
                DataTable tablaindices = new DataTable();
                tablaindices = bdvirtualIndice.Tables["mapa"];

                return int.Parse(tablaindices.Rows[0][0].ToString());
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conex.Close();
            }
        }

        //Obtiene el mapa con la ID que se pasa por argumentos
        public DataTable obtenerMapa(int id)
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter("select * from mapa where idMapa=" + id.ToString(), conex);

                da.Fill(bdvirtual, "mapa");

                return bdvirtual.Tables["mapa"];
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conex.Close();
            }
        }

        //Obtiene las localizaciones asociadas al mapa con la ID que se pasa por argumentos
        public DataTable obtenerLocalizacionMapa(int id)
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter("select * from mapalocalizacion where idMapa=" + id.ToString(), conex);

                da.Fill(bdvirtual, "mapalocalizacion");

                return bdvirtual.Tables["mapalocalizacion"];
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conex.Close();
            }
        }

        //Devuelve todos los mapas de la base de datos
        public DataTable obtenerMapas()
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter("select * from mapa", conex);

                da.Fill(bdvirtual, "mapa");

                return bdvirtual.Tables["mapa"];
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conex.Close();
            }
        }

        //Modifica una localizacion
        public void editarMapa(int id, string nombre, string imagen, string descripcion)
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                int i = 0;

                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter("select * from mapa", conex);

                da.Fill(bdvirtual, "mapa");

                DataTable tabla = new DataTable();
                tabla = bdvirtual.Tables["mapa"];

                foreach (DataRow registro in tabla.Rows)
                {
                    if ((int)registro["idMapa"] == id)
                    {
                        tabla.Rows[i][1] = nombre;
                        tabla.Rows[i][2] = imagen;
                        tabla.Rows[i][3] = descripcion;
                    }

                    i++;
                }

                SqlCommandBuilder cbuilder = new SqlCommandBuilder(da);
                da.Update(bdvirtual, "mapa");
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conex.Close();
            }
        }

        //Borra las localizaciones asociadas a un mapa
        public void borrarLocalizacionMapa(int id)
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter("select * from MapaLocalizacion", conex);

                da.Fill(bdvirtual, "MapaLocalizacion");
                DataTable tabla = bdvirtual.Tables["MapaLocalizacion"];

                int i = 0;

                foreach (DataRow registro in tabla.Rows)
                {
                    if ((int)registro["idMapa"] == id)
                    {
                        tabla.Rows[i].Delete();
                    }

                    i++;
                }

                SqlCommandBuilder cbuilder = new SqlCommandBuilder(da);
                da.Update(bdvirtual, "MapaLocalizacion");
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conex.Close();
            }
        }

        //Borra un mapa
        public void borrarMapa(int id)
        {
            int i = 0;
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter("select * from mapa", conex);

                da.Fill(bdvirtual, "mapa");
                //Obtenemos la tabla mapa
                DataTable tabla = new DataTable();
                tabla = bdvirtual.Tables["mapa"];

                foreach (DataRow registro in tabla.Rows)
                {
                    if ((int)registro["idMapa"] == id)
                    {
                        tabla.Rows[i].Delete();
                    }
                    i++;
                }

                SqlCommandBuilder cbuilder = new SqlCommandBuilder(da);
                da.Update(bdvirtual, "mapa");
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conex.Close();
            }
        }

        //Busca mapas por nombre o descripcion
        public DataTable obtenerMapaNombre(string nombre, string nom_des)
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            try
            {
                DataSet bdvirtual = new DataSet();
                SqlDataAdapter da = null;
                if (nom_des == "nombre")
                {
                    da = new SqlDataAdapter("select * from mapa where nombreMapa LIKE '%" + nombre + "%'", conex);
                }
                else if (nom_des == "descripcion")
                {
                    da = new SqlDataAdapter("select * from mapa where descripcionMapa LIKE '%" + nombre + "%'", conex);
                }
                da.Fill(bdvirtual, "mapa");
                DataTable tabla = new DataTable();
                tabla = bdvirtual.Tables["mapa"];

                return tabla;
            }
            catch
            {
                DataTable tablavacia = new DataTable();
                return tablavacia;
            }
            finally
            {
                conex.Close();
            }
        }

        public DataSet obtenerLocalizacionesMapa(int id)
        {
            string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
            SqlConnection conex = new SqlConnection(cadenaConexion);

            DataSet bdvirtual = new DataSet();
            SqlDataAdapter da = new SqlDataAdapter("select * from Localizacion where idLocalizacion in (select idLocalizacion from MapaLocalizacion where idMapa = " + id.ToString() + ')', conex);

            da.Fill(bdvirtual, "mapa");
            return bdvirtual;
        }

        public SqlDataReader obtenerLocalizacionMapaCAD(int idMapa)
        {
            try
            {
                string cadenaConexion = Settings.Default.BDProyecto7ConnectionString;
                SqlConnection conex = new SqlConnection(cadenaConexion);

                conex.Open();

                // creamos la query y la ejecutamos
                SqlCommand comando = new SqlCommand("SELECT [idLocalizacion],[coordenadaX],[coordenadaY] FROM [Mapa], [MapaLocalizacion] WHERE [Mapa].[idMapa]=" + idMapa + " AND [Mapa].[idMapa]=[MapaLocalizacion].[idMapa] ", conex);
                SqlDataReader dr = comando.ExecuteReader();
                return dr;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //conexion.Close();
            }
        }
    }
}
